package com.xxzuibang.day11.房屋出租系统项目.service;

import com.xxzuibang.day11.房屋出租系统项目.domain.House;

public class HouseService {
    private House[] houses;//声明一个houses数组保存House对象
    private int houseNums = 1;//记录当前有多少个房屋信息，默认初始是1个
    private int idCounter = 1;//记录当前的id增长到那一个值，由于后面需要id自增长，所以id从1开始

    //构造器
    public HouseService(int size) {
        houses = new House[size];//当创建一个HouseService对象的时候，指定数组的大小
        //为了配合测试列表信息，初始化一个house对象
        houses[0] = new House(1, "tom", "10086", "渭滨区", 2000, "未出租");
    }


    //find方法，返回house对象或者是一个空
    public House findById(int findId) {
        //遍历所有的房屋信息个数，如果传进去的用户输入的id也就是findId可以在houses数组中获取到，返回这个这个id对应的房屋信息
        for (int i = 0; i < houseNums; i++) {
            if (findId == houses[i].getId()) {
                return houses[i];
            }
        }
        return null;
    }


    //del方法，删除一个房屋信息
    public boolean del(int delId) {
        //应当找到删除的房屋信息，一定搞清楚下标和房屋的编号不是一回事
        int index = -1;//设置一个下标初始值为-1
        //遍历查找houseNums里面是不是有用户输入的delId
        for (int i = 0; i < houseNums; i++) {
            if (delId == houses[i].getId()) {//删除的房屋对应的id，在数组下标为i的元素

                index = i;//就是用index记录i，就是如果找到了的话，这个index的值就换了
            }
        }
        if (index == -1) {//说明delId在数组中不存在，index还是初始值-1
            return false;
        }
        //如果找到，就删除
        //从找到的下标开始遍历到所有的结束，把后一个赋给前一个，以此来达到删除的目的
        for (int i = index; i < houseNums - 1; i++) {
            houses[i] = houses[i + 1];
        }
        //最后一个是空的
        houses[houseNums - 1] = null;//把当前存在的房屋信息的最后一个设置为空
        houseNums--;//少一个
        return true;
    }

    //add方法，添加新对象，返回boolean
    public boolean add(House newHouse) {
        //判断是否可以继续添加（我们暂时不考虑数组扩容的问题）
        if (houseNums == houses.length) {
            System.out.println("数组已满，不能再添加了");
            return false;
        }
        houses[houseNums] = newHouse;//把新的对象加入到数组的最后
        houseNums++;//新增加了一个房屋
        //我们需要设置一个id自增长的机制
        idCounter++;
        newHouse.setId(idCounter);//把增加后的id再存入Id里面
        return true;//添加成功返回true
    }

    //list方法，返回houses
    public House[] list() {
        return houses;
    }
}
